# Declaration of variables
CC = g++
CC_FLAGS = -Wall -g -c --std=c++98 -I../common -I../server `pkg-config gtkmm-3.0 --cflags`
LDFLAGS = `pkg-config gtkmm-3.0 --libs` -lpthread

# File names
EXEC = editor
SOURCES = $(wildcard *.cpp)
OBJECTS = $(SOURCES:.cpp=.o)

SERVER_OBJECTS=BlueZombie.o Bomberman.o Bomb.o Box.o BZombieMovStrategy.o Campania.o CampaniaXml.o Clonable.o ComunicacionException.o EnemyFactory.o Enemy.o EnemySpawner.o ExplosionEffect.o ExplosionObserver.o GameController.o GameEventObserver.o Game.o GreenZombie.o GZombieMovStrategy.o Identifiable.o JugadorConectado.o JugadorThreadEnvio.o JugadorThreadRecepcion.o LivingObject.o MapEffect.o Map.o MapObject.o MapObjectFactory.o MapStateObserver.o MapTile.o MensajeGeneral.o MetalWall.o MovementStrategy.o MovingBomb.o MovingBombStrategy.o MovingObject.o MovStrategyFactory.o Nivel.o ObjectStateObserver.o Observable.o ParserException.o Partida.o Plant.o Player.o Positionable.o ProcesoServer.o Protocolo.o ProtocoloServidor.o RedZombie.o Representable.o RZombieMovStrategy.o ScoresObserver.o ServerSocket.o ServerThread.o Spawner.o TimedBomb.o tinyxml2.o 

# Main target
$(EXEC): $(OBJECTS)
	cd ../common && $(MAKE)
	cp ../common/common.a .
	cd ../server && $(MAKE)
	cp ../server/BlueZombie.o .
	cp ../server/Bomberman.o .
	cp ../server/Bomb.o .
	cp ../server/Box.o .
	cp ../server/BZombieMovStrategy.o .
	cp ../server/Campania.o .
	cp ../server/CampaniaXml.o .	
	cp ../server/Clonable.o .
	cp ../server/ComunicacionException.o .
	cp ../server/EnemyFactory.o .
	cp ../server/Enemy.o .
	cp ../server/EnemySpawner.o .
	cp ../server/ExplosionEffect.o .
	cp ../server/ExplosionObserver.o .
	cp ../server/GameController.o .
	cp ../server/GameEventObserver.o .
	cp ../server/Game.o .
	cp ../server/GreenZombie.o .
	cp ../server/GZombieMovStrategy.o .
	cp ../server/Identifiable.o .
	cp ../server/JugadorConectado.o .
	cp ../server/JugadorThreadEnvio.o .
	cp ../server/JugadorThreadRecepcion.o .
	cp ../server/LivingObject.o .
	cp ../server/MapEffect.o .
	cp ../server/Map.o .
	cp ../server/MapObject.o .
	cp ../server/MapObjectFactory.o .
	cp ../server/MapStateObserver.o .
	cp ../server/MapTile.o .
	cp ../server/MensajeGeneral.o .
	cp ../server/MetalWall.o .
	cp ../server/MovementStrategy.o .
	cp ../server/MovingBomb.o .
	cp ../server/MovingBombStrategy.o .
	cp ../server/MovingObject.o .
	cp ../server/MovStrategyFactory.o .
	cp ../server/Nivel.o .
	cp ../server/ObjectStateObserver.o .
	cp ../server/Observable.o .
	cp ../server/ParserException.o .	
	cp ../server/Partida.o .
	cp ../server/Plant.o .
	cp ../server/Player.o .
	cp ../server/Positionable.o .
	cp ../server/ProcesoServer.o .
	cp ../server/Protocolo.o .
	cp ../server/ProtocoloServidor.o .
	cp ../server/RedZombie.o .
	cp ../server/Representable.o .
	cp ../server/RZombieMovStrategy.o .
	cp ../server/ScoresObserver.o .
	cp ../server/ServerSocket.o .
	cp ../server/ServerThread.o .
	cp ../server/Spawner.o .
	cp ../server/TimedBomb.o .
	cp ../server/tinyxml2.o .
	
	
	$(CC) $(OBJECTS) $(SERVER_OBJECTS) common.a $(LDFLAGS) -o $(EXEC)

# To obtain object files
%.o: %.cpp 
	$(CC) $(CC_FLAGS) $< -o $@

# To remove generated files
clean:
	rm -f $(EXEC) $(OBJECTS) common.a $(SERVER_OBJECTS)

all: $(EXEC)

.PHONY: all